package com.zenithmind.gateway.event;

/**
 * 网关事件发布器接口
 * 遵循迪米特法则：减少类之间的直接依赖
 * 遵循依赖倒置原则：依赖抽象而非具体实现
 */
public interface GatewayEventPublisher {
    
    /**
     * 发布事件
     * @param event 事件对象
     */
    void publishEvent(GatewayEvent event);
    
    /**
     * 发布请求开始事件
     * @param requestId 请求ID
     * @param path 请求路径
     * @param method 请求方法
     * @param userId 用户ID
     */
    void publishRequestStartEvent(String requestId, String path, String method, String userId);
    
    /**
     * 发布请求完成事件
     * @param requestId 请求ID
     * @param statusCode 响应状态码
     * @param executionTime 执行时间
     */
    void publishRequestCompleteEvent(String requestId, int statusCode, long executionTime);
    
    /**
     * 发布请求错误事件
     * @param requestId 请求ID
     * @param error 错误信息
     * @param executionTime 执行时间
     */
    void publishRequestErrorEvent(String requestId, String error, long executionTime);
}
